package 语言特性学习;

import org.junit.Test;

/**
 * Description
 *
 * @Author: SunAo
 * @Date: 2021/2/26 15:35
 */
public class 基本类型等于和equals测试 {


    @Test
    public void 测试2(){

        Integer a1=127,a2=127;
        System.out.println(a1==a2);

        Integer b1=128,b2=128;
        System.out.println(b1==b2);

//        Integer作为常量时，对于-128到127之间的数，会进行缓存，
//        也就是说Integer a1 = 127时,在范围之内，这个时候就存放在缓存中，
//        当再创建a2时，java发现缓存中存在127这个数了，
//        就直接取出来赋值给a2，所以a1 == a2的。
//        当超过范围就是new Integer()来new一个对象了，
//        所以b1、b2都是new Integer(128)出来的变量，所以它们不等。


        int c1=1,c2=1;
        System.out.println(c1==c2);
        // 这种永远都是true;

        Integer d1=1;int d2=1;
        System.out.println(d1==d2);
        // d1会进行拆箱操作，相当于 int==int

        Integer e1=new Integer(1);Integer e2 = new Integer(1);
        System.out.println(e1==e2);
        // 不会拆箱，对比的是内存地址，所以为false


        Integer f1 = new Integer(1);Integer f2=1;
        System.out.println(f1==f2);
        // f1是对象，f2是常量，内存地址不一样，所以为false

    }
}
